package com.spider.demo4proxy;

import java.lang.reflect.InvocationHandler;
import java.lang.reflect.Method;
import java.lang.reflect.Proxy;

public class ProxyUtil {
    //创建一个明星对象的代理对象返回
    public static StarService createProxy(Star  s) {
        /**
         * 参数一：用于执行用哪个类加载器去加载生成的代理类。
         * 参数二：用于指定代理类需要实现的接口。
         * 参数三：用于指定生成的代理对象要干什么事情
         */
        StarService proxy = (StarService)Proxy.newProxyInstance(ProxyUtil.class.getClassLoader(),
                s.getClass().getInterfaces(), new InvocationHandler() {
                    @Override
                    public Object invoke(Object proxy, Method method, Object[] args) throws Throwable {
                        //用来声明代理对象要干什么事情。
                        //参数一：proxy接收到代理对象的本身
                        //参数二：method表示代理对象接收到的方法
                        //参数三：args表示代理对象接收到的参数
                        String methodName = method.getName();
                        if ("sing".equals(methodName)) {
                            System.out.println("准备话筒，收钱20万");
                        }
                        if ("dance".equals(methodName)) {
                            System.out.println("准备场地，收钱10万");
                        }
                        //真正干活
                        Object result = method.invoke(s, args);
                        return result;
                    }
                });
        return proxy;
    }
}
